Fundamentos
Refiere a la creación detallada del software mediante una combinación de codificación, verificación, pruebas unitarias, pruebas de integración y debugging.
Anticipar el cambio ayuda a escribir software extensible, el cuál será facilmente mejorable sin tener que modificar excesivamente la estructura base.
Permitir encontrar las faltas facilmente en el sw, tanto por testers como devs.
Dependiendo del proyecto, poco o mucho diseño se realizará en la etapa de construcción. Siempre hay algo.
El propósito es reducir el intervalo entre que se introduce una falla en el código y su detección.
Application programming interface.
La manera en que se manejan los errores afecta varios atributos de calidad (correctitud, robustez, etc). Existen muchas técnicas para realizar esto: aserciones, retornar valores neutros, logueo de errores, retornar códigos de error, “apagar el software”, etc.
Buscan abstraer los detalles de los lenguajes específicos de programación y las decisiones sobre la organización del software.
Una especificación construida en un modelo ejecutable puede ser desplegada en varios entornos de ejecución sin realizar cambios.
Ejemplos son xUML, BPMN, Model-driven Architecture.
Involucra el análisis sintático (o parseo) de la entrada.
Son primitivas que facilitan concurrencia y sincronización.
Paradigma que permite ofrecer servicios de computación a través de una red, que usualmente es Internet.
Una instancia del software que corre en la infraestructura del proveedor y sirve a múltiples organizaciones de clientes.
Es la encapsulación de una abstracción de un ambiente de desarrollo y el empaquetamiento de una serie de módulos o complementos que proporcionan, normalmente, una funcionalidad horizontal (persistencia de datos, autenticación, mensajería, etc.).
Ejemplos: Google App Engine, Microsoft Azure, Bluemix de IBM.
En algunos modelos de servicio se ofrece la plataforma de desarrollo y las herramientas de programación por lo que puede desarrollar aplicaciones propias y controlar la aplicación, pero no controla la infraestructura.
Públicos, privados e híbridos.
Es un medio de entregar almacenamiento básico y capacidades de cómputo como servicios estandarizados en la red.
A veces llamados Hardware as a Service (HaaS).
Por ejemplo, Amazon Web Services.
Se distinguen por cuestiones de paralelismo, comunicación y tolerancia a fallas.
Los sistemas heterogéneos consisten en una variedad de unidades computacionales especializadas de diferentes tipos. En general son independientes pero se comunican entre sí.
Se plantean cuestiones relacionadas a los distintos lenguajes utilizados, así como de aspectos sobre la comunicación.
Permiten que los programadores desarrollen aplicaciones portables que pueden ser ejecutadas en entornos compatibles sin realizar cambios. Por ej. J2EE.
O Test-driven development (TDD). Estilo de programación en el cual se escriben las pruebas antes que el código.
Proveen facilidades a los programadores para desarrollar software. La elección de un IDE puede afectar la eficiencia y la calidad de la construcción del software.
Son herramientas que permiten el desarrollo y mantenimiento de interfaces de usuario gráficas. En general de un modo WYSIWYG (what you see is what you get – lo que ves es lo que obtienes).
Permiten automatizar las pruebas unitarias. El programador especifica las entradas y salidas esperadas y la herramienta permite ejecutar un conjunto de pruebas indicando la salida obtenida.
Un estándar o estilo de programación son convenciones y buenas prácticas para escribir código fuente en determinados lenguajes de programación.
Administración de una Base de Conocimiento o Biblioteca de Código
Productor
Consumidor
If debugging is the process of removing software bugs, then programming must be the process of putting them in. — Edsger Dijkstra